﻿#ifndef ONEGIS_PSDE_DATASOURCE_IC_TRACKCLASS_H
#define ONEGIS_PSDE_DATASOURCE_IC_TRACKCLASS_H

#include <memory>
#include <vector>
#include "libengine.h"
#include "PbTrackData.pb.h"
using namespace onegis::dynamicdata::model;

namespace onegis{
namespace psde{
namespace datasource{

class LIBENGINE_API IC_TrackClass
{
public:
    virtual ~IC_TrackClass(){}

    /**
     * 保存轨迹数据
     * datas： 保存的轨迹信息
     * reponse： 保存返回结果
     * 返回值： true -- 成功，false -- 失败
     */
    virtual bool saveTrackDatas(const PbTrackDatas &datas, PbTrackResponseResult &response) = 0;

    /**
     * 查询轨迹数据 
     * filter： 轨迹查询条件
     * response： 返回查询结果
     * 返回值：true -- 成功，false -- 失败
     */
    virtual bool queryTrackDatas(const PbTrackFilter &filter, PbTrackResponseResult &response) = 0;

    /**
     * 通过调用轨迹相似性算法服务，返回相似度最高的轨迹
     * mainTraj： 主轨迹
     * compTrajs： 与主轨迹比较的所有副轨迹
     * simiTrajIds： 返回相似度由高到底的轨迹索引集合
     * simiTrajNum： 返回相似度高的轨迹数量，必须大于0，小于等于simiTrajs轨迹集合数量
     * errMsg：请求出错时返回错误信息
     * 返回值： true -- 成功，false -- 失败
     */
    virtual bool querySimilarTrajs(const PbObjTrackDatas &mainTraj, const PbTrackDatas &compTrajs, std::vector<int> &simiTrajIds, int simiTrajNum, std::string &errMsg) = 0;

};
typedef std::tr1::shared_ptr<IC_TrackClass> TrackClassPtr;

}
}
};


#endif